package com.me.study.javaCore.dynamicProxy.jdkDynamic;

import com.me.common.util.JdkDynamicProxyUtil;
import com.me.study.javaCore.dynamicProxy.ITarget;
import com.me.study.javaCore.dynamicProxy.TargetImpl;
import org.junit.Test;

/**
 * JDK动态代理 测试类
 *
 * @author ME
 * @date 2019/2/27 15:49
 */
public class TestJdkDynamic {

    @Test
    public void test() {
        // 保存 jdk动态代理 生成的 class文件，设置 VM options：-Dsun.misc.ProxyGenerator.saveGeneratedFiles=true

        ITarget target = new TargetImpl();
        /**整合了 切面增强逻辑和 业务逻辑的 完整逻辑的调用处理器对象*/
        JdkDynamicAdvice jdkAdvice = new JdkDynamicAdvice(target);
        /**
         * paparam1: 类加载器--目标类所使用的类加载器
         * paparam2: 代理实例所需实现的一组接口
         * paparam3: 整合了 切面增强逻辑和 业务逻辑的 完整逻辑的调用处理器对象
         */
        ITarget proxy = JdkDynamicProxyUtil.getProxyObject(target, jdkAdvice);

        // ITarget proxy = (ITarget) Proxy.newProxyInstance(target.getClass().getClassLoader(),
        //         target.getClass().getInterfaces(), jdkAdvice);

        // 方法调用
        proxy.doSome22("Weblogic");

        // 生成文件
        // JdkDynamicProxyUtil.createProxyClassFile("ITargetProxy0", ITarget.class);
    }
}
